package com.zhongying.jf.util.pay;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * <b>金额换算工具</b>
 * @author 
 * zhaojianhua
 */
public class AmountUtils {
	
	private static final int PRECISION = 2;
	/**
	 * 大小计较
	 * @param a
	 * @param b
	 * @return a > b ? true : false
	 */
	public static boolean isBigger(BigDecimal a, BigDecimal b) {
		if(a==null){
			a = newBigDecimal(0.00);
		}
		if(b==null){
			b = newBigDecimal(0.00);
		}
		return compareTo(a, b) > 0;
	}
	
	/**
	 * 大小计较
	 * @param a
	 * @param b
	 * @return a == b ? true : false
	 */
	public static boolean isEqual(BigDecimal a, BigDecimal b) {
		if(a==null){
			a = newBigDecimal(0.00);
		}
		if(b==null){
			b = newBigDecimal(0.00);
		}
		return compareTo(a, b) == 0;
	}
	
	protected static int compareTo(BigDecimal a,BigDecimal b){
		return roundHalf(a).compareTo(roundHalf(b));
	}
	
	/**
	 * 除 a/b 保留两位小数
	 * @param a
	 * @param b
	 * @return
	 */
	public static BigDecimal divide(BigDecimal a,BigDecimal b){
		if(a==null){
			a = newBigDecimal(0.00);
		}
		if(b==null){
			b = newBigDecimal(0.00);
		}
		return a.divide(b, PRECISION, BigDecimal.ROUND_HALF_UP);
	}
	
	/**
	 * 除 a*b 保留两位小数
	 * @param a
	 * @param b
	 * @return
	 */
	public static BigDecimal multiply(BigDecimal a,BigDecimal b){
		if(a==null){
			a = newBigDecimal(0.00);
		}
		if(b==null){
			b = newBigDecimal(0.00);
		}
		return roundHalf(a.multiply(b));
	}

	/**
	 * 减 a-b 保留两位小数
	 * @param a
	 * @param b
	 * @return
	 */
	public static BigDecimal subtract(BigDecimal a,BigDecimal b){
		if(a==null){
			a = newBigDecimal(0.00);
		}
		if(b==null){
			b = newBigDecimal(0.00);
		}
		return a.subtract(b);
	}
	
	/**
	 * 加 a+b 保留两位小数
	 * @param a
	 * @param b
	 * @return
	 */
	public static BigDecimal add(BigDecimal a,BigDecimal b){
		if(a==null){
			a = newBigDecimal(0.00);
		}
		if(b==null){
			b = newBigDecimal(0.00);
		}
		return a.add(b);
	}
	
	/**
	 * 金额转字符 保留两位小数 四舍五入
	 * @param amount
	 * @return
	 */
	public static BigDecimal roundHalf(BigDecimal amount){
		return amount.setScale(PRECISION ,BigDecimal.ROUND_HALF_UP); 
	}
	
	/**
	 * 金额转字符 保留两位小数 舍去末位
	 * @param amount
	 * @return
	 */
	public static String roundHalfStr(BigDecimal amount){
		DecimalFormat df = new DecimalFormat("#0.00");
		return df.format(roundHalf(amount));
	}
	
	public static BigDecimal newBigDecimal(double amount){
		return roundHalf(new BigDecimal(amount));
	}
	
	public static BigDecimal newBigDecimal(BigDecimal amount){
		if(amount == null)
			amount = newBigDecimal(0.00);
		return roundHalf(amount);
	}
}
